package com.itcam.cm.manager.config;

import com.itcam.cm.manager.interceptor.LoginAuthInterceptor;
import com.itcam.cm.manager.util.UserAuthProperties;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Configuration;
import org.springframework.stereotype.Component;
import org.springframework.web.servlet.config.annotation.CorsRegistry;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;

@Component
public class WebMvcConfiguration implements WebMvcConfigurer {

    @Autowired
    private LoginAuthInterceptor loginAuthInterceptor;

    @Autowired
    UserAuthProperties userAuthProperties;

    /**
     * 重写 WebMvcConfigurer 接口的 addInterceptors 方法，用于配置拦截器
     * 该方法会在 Spring MVC 配置拦截器时被调用，将自定义的拦截器添加到拦截器注册表中
     *
     * @param registry 拦截器注册表，用于注册和配置拦截器
     */
    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        // 向拦截器注册表中添加自定义的用户登录认证拦截器
        registry.addInterceptor(loginAuthInterceptor)
                // 设置拦截器需要排除的路径模式
                // 以下路径将不会被 userLoginAuthInterceptor 拦截
//                .excludePathPatterns("/admin/system/index/login", "/admin/system/index/generateValidateCode")
                .excludePathPatterns(userAuthProperties.getNoAuthUrls())
                // 设置拦截器需要拦截的路径模式
                // 这里表示拦截所有路径
                .addPathPatterns("/**");
    }


    /**
     * 重写 WebMvcConfigurer 接口的 addCorsMappings 方法，用于配置跨域资源共享（CORS）策略
     * @param registry 用于注册 CORS 映射的注册表对象
     */
    @Override
    public void addCorsMappings(CorsRegistry registry) {
        // 对所有路径进行跨域配置
        registry.addMapping("/**")
                // 允许跨域请求携带凭证（如 cookie、HTTP 认证等）
                .allowCredentials(true)
                // 允许所有来源的跨域请求
                .allowedOriginPatterns("*")
                // 允许所有 HTTP 方法进行跨域请求
                .allowedMethods("*")
                // 允许所有请求头进行跨域请求
                .allowedHeaders("*");
    }

}
